From: Florian Müllner Date: Fri, 12 Oct 2012 18:59:31 +0000 (+0200) Subject: dateMenu: Hide "Open Calendar" item if calendar unavailable X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~5618 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=4342155748249e0090850c084223f226de619777;p=gnome-shell.git dateMenu: Hide "Open Calendar" item if calendar unavailable The configured calendar application might not actually be installed. Instead of failing with an error message, hide the menu item altogether in this case. https://bugzilla.gnome.org/show_bug.cgi?id=686050 --- diff --git a/js/ui/dateMenu.js b/js/ui/dateMenu.js index 7f01a7615..7b762b3de 100644 --- a/js/ui/dateMenu.js +++ b/js/ui/dateMenu.js @@ -113,6 +113,11 @@ const DateMenuButton = new Lang.Class({ this._openCalendarItem.actor.can_focus = false; vbox.add(this._openCalendarItem.actor, {y_align: St.Align.END, expand: true, y_fill: false}); + this._calendarSettings = new Gio.Settings({ schema: 'org.gnome.desktop.default-applications.office.calendar' }); + this._calendarSettings.connect('changed::exec', + Lang.bind(this, this._calendarSettingsChanged)); + this._calendarSettingsChanged(); + // Whenever the menu is opened, select today this.menu.connect('open-state-changed', Lang.bind(this, function(menu, isOpen) { if (isOpen) { @@ -146,6 +151,12 @@ const DateMenuButton = new Lang.Class({ this._sessionUpdated(); }, + _calendarSettingsChanged: function() { + let exec = this._calendarSettings.get_string('exec'); + let fullExec = GLib.find_program_in_path(exec); + this._openCalendarItem.actor.visible = fullExec != null; + }, + _setEventsVisibility: function(visible) { this._openCalendarItem.actor.visible = visible; this._separator.visible = visible; @@ -194,14 +205,13 @@ const DateMenuButton = new Lang.Class({ _onOpenCalendarActivate: function() { this.menu.close(); - let calendarSettings = new Gio.Settings({ schema: 'org.gnome.desktop.default-applications.office.calendar' }); - let tool = calendarSettings.get_string('exec'); + let tool = this._calendarSettings.get_string('exec'); if (tool.length == 0 || tool.substr(0, 9) == 'evolution') { // TODO: pass the selected day let app = Shell.AppSystem.get_default().lookup_app('evolution-calendar.desktop'); app.activate(); } else { - let needTerm = calendarSettings.get_boolean('needs-term'); + let needTerm = this._calendarSettings.get_boolean('needs-term'); if (needTerm) { let terminalSettings = new Gio.Settings({ schema: 'org.gnome.desktop.default-applications.terminal' }); let term = terminalSettings.get_string('exec');